name: Image CI Cache Cleaner

# Any change in triggers needs to be reflected in the concurrency group.
on:
  workflow_dispatch:
  schedule:
    # Run the GC every Monday at 6am
    - cron: "0 6 * * 1"

permissions: read-all

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.event.after }}
  cancel-in-progress: true

jobs:
  cache-cleaner:
    name: Clean Image Cache
    runs-on: ubuntu-22.04
    strategy:
      matrix:
        include:
          - name: cilium

          - name: operator-aws

          - name: operator-azure

          - name: operator-alibabacloud

          - name: operator-generic

          - name: hubble-relay

          - name: clustermesh-apiserver

          - name: kvstoremesh

          - name: docker-plugin

    steps:
      # Fetch the source code so that we can get the right cache key
      - name: Checkout Source Code
        uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
        with:
          persist-credentials: false

      # Load Golang cache build from GitHub
      - name: Load ${{ matrix.name }} Golang cache build from GitHub
        uses: actions/cache@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # v4.0.0
        id: cache
        with:
          path: /tmp/.cache/${{ matrix.name }}
          key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}-${{ matrix.name }}-${{ github.sha }}
          restore-keys: |
            ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}-${{ matrix.name }}-
            ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}-
            ${{ runner.os }}-go-

      - name: Create ${{ matrix.name }} cache directory
        if: ${{ steps.cache.outputs.cache-hit != 'true' }}
        shell: bash
        run: |
          mkdir -p /tmp/.cache/${{ matrix.name }}

      # Clean docker's golang's cache
      - name: Clean ${{ matrix.name }} Golang cache from GitHub
        shell: bash
        run: |
          rm -f /tmp/.cache/${{ matrix.name }}/go-build-cache.tar.gz
          rm -f /tmp/.cache/${{ matrix.name }}/go-pkg-cache.tar.gz
